Como Serializar-Deserializar un objeto usando JSON.
Primero tenemos que añadir el paquete de Newtonsoft.Json desde nuget:
A continuación importamos el namespace de la librería:
using Newtonsoft.Json;
En este caso vamos a usar una lista de objetos para serializarla en un archivo
Clase Persona:
namespace FileExample
{
public class Persona
{
public string nombre;
public int edad;
}
}
NOTA: Solo se serializarán los campos del objeto que sean públicos.
Definimos nuestros objetos:
List<Persona> lista = new List<Persona>()
{
new Persona()
{
nombre = "Pepe",
edad = 45
},
new Persona()
{
nombre = "Mercedes",
edad = 56
}
};
Para serializar declaramos una clase JsonSerializer y usamos el método Serialize pasándole el steam en el que escribiremos y los datos que queremos serializar:
using (StreamWriter escritor = File.CreateText(archivo))
{
JsonSerializer serializador = new JsonSerializer();
serializador.Serialize(escritor, lista);
}
Para deserializar usamod el método estático DeserializeObject la clase JsonConvert
string data = File.ReadAllText(archivo);
List<Persona> nuevaLista = JsonConvert.DeserializeObject<List<Persona>>(data);
Console.WriteLine(nuevaLista[1].nombre);
Código Completo:
using static System.IO.Directory;
using static System.IO.Path;
using static System.Environment;
using Newtonsoft.Json;
using FileExample;
string dir = Combine(GetFolderPath(SpecialFolder.UserProfile), "PruebaArchivo");
CreateDirectory(dir);
string archivo = Combine(dir, "persona.json");
Persona persona = new Persona();
List<Persona> lista = new List<Persona>()
{
new Persona()
{
nombre = "Pepe",
edad = 45
},
new Persona()
{
nombre = "Mercedes",
edad = 56
}
};
/**** SERIALIZAR *****/
using (StreamWriter escritor = File.CreateText(archivo))
{
JsonSerializer serializador = new JsonSerializer();
serializador.Serialize(escritor, lista);
}
/**** DESERIALIZAR *****/
string data = File.ReadAllText(archivo);
List<Persona> nuevaLista = JsonConvert.DeserializeObject<List<Persona>>(data);
Console.WriteLine(nuevaLista[1].nombre);
C# | Serializar | JSON